home *** CD-ROM | disk | FTP | other *** search
/ Aminet 40 / Aminet 40 (2000)(Schatztruhe)[!][Dec 2000].iso / Aminet / util / cli / DiskLED1.2.lha / WinDesigner.i < prev   
Text File  |  2000-09-05  |  32KB  |  882 lines

  1. *******************************************************************************
  2. *        All ugly code down here is generated by Designer...              *
  3. *******************************************************************************
  4.  
  5. NewMenu0SubItemNumber:
  6.     dc.w    0
  7. NewMenu0ItemNumber:
  8.     dc.w    0
  9. NewMenu0Item:
  10.     dc.l    0
  11.  
  12.  
  13. ProcessMenuIDCMPNewMenu0:               ; MenuNumber in d0, Code field of intuimessage.
  14.     movem.l d1-d4/a0-a4/a6,-(sp)
  15.  
  16. .Menuloop
  17.     move.l  #0,d5
  18.     move.w  d0,d5
  19.     move.l  d5,d0
  20.     movea.l NewMenu0,a0
  21.     movea.l _IntuitionBase,a6
  22.     jsr     _LVOItemAddress(a6)
  23.     move.l  d0,NewMenu0Item
  24.     tst.l   d0
  25.     beq     .D
  26.     move.l  d5,d0
  27.     lsr     #5,d0
  28.     lsr     #6,d0
  29.     and.w   #31,d0                      ; SubItemNumber in d0
  30.     move.w  d0,NewMenu0SubItemNumber
  31.     move.w  d5,d0
  32.     lsr     #5,d0
  33.     and.w   #63,d0                      ; ItemNumber in d0
  34.     move.w  d0,NewMenu0ItemNumber
  35.     move.w  d5,d0
  36.     and.w   #31,d0                      ; MenuNumber in d0
  37.  
  38.     cmp.w   #31,d0
  39.     bne     .No0
  40.     jmp     .Done
  41. .No0
  42.     cmp.w    #NewMenu_Menu0X,d0
  43.     bne    .NoOption
  44.  
  45.     move.w    NewMenu0ItemNumber,d0
  46.     cmp.w    #63,d0
  47.     bne    .NoOption
  48.                                            ; No Item selected
  49.     jmp    .Done
  50. .NoOption
  51.     cmp.w    #NewMenu_Menu0_Item0X,d0
  52.     bne    .NoAboutMenu
  53.     Jsr    About_Diskled
  54.     bra.w    .Done
  55. .NoAboutMenu
  56.  
  57.     cmp.w    #NewMenu_Menu0_Item1X,d0
  58.     bne    .NoQuit
  59.     Move.l  #1,Done            ; QUIT
  60.     bra.w    .Done
  61.     bra .D
  62. .NoQuit
  63.  
  64. .Done
  65.     move.l  NewMenu0Item,a0
  66.     move.w  32(a0),d0
  67.     jmp     .MenuLoop
  68.  
  69. .D
  70.     movem.l (sp)+,d1-d4/a0-a4/a6
  71.     rts
  72.  
  73.  
  74. NewMenu0Name0:
  75.     dc.b    'DiskLED',0
  76.  
  77. NewMenu0Name1:
  78.     dc.b    'About...',0
  79.  
  80. NewMenu0Comm1:
  81.     dc.b    'A',0
  82.  
  83. NewMenu0Name2:
  84.     dc.b    'Quit',0
  85.  
  86. NewMenu0Comm2:
  87.     dc.b    'Q',0
  88.  
  89.     cnop    0,2
  90.  
  91.     XDEF    NewMenu0NewMenu0
  92.  
  93. NewMenu0NewMenu0:
  94.     dc.b    1,0                         ; Menu Title 
  95.     dc.l    NewMenu0Name0               ; Title String
  96.     dc.l    0                           ; CommKey (Not Used)
  97.     dc.w    0                           ; Title Flags
  98.     dc.l    0,0                         ; MX, User Field
  99.  
  100. NewMenu0NewMenu1:
  101.     dc.b    2,0                         ; Menu Item
  102.     dc.l    NewMenu0Name1               ; Item String
  103.     dc.l    NewMenu0Comm1               ; Item Commkey
  104.     dc.w    0                           ; Item Flags
  105.     dc.l    0                           ; Item Mutual Exclude
  106.     dc.l    0                           ; User Field
  107.  
  108. NewMenu0NewMenu2:
  109.     dc.b    2,0                         ; Menu Item
  110.     dc.l    NewMenu0Name2               ; Item String
  111.     dc.l    NewMenu0Comm2               ; Item Commkey
  112.     dc.w    0                           ; Item Flags
  113.     dc.l    0                           ; Item Mutual Exclude
  114.     dc.l    0                           ; User Field
  115.  
  116.     dc.b    0,0                         ; End new menu array
  117.     dc.l    0,0
  118.     dc.w    0
  119.     dc.l    0,0
  120.  
  121.     XDEF    NewMenu0
  122. NewMenu0:                               ; Menu Pointer
  123.     dc.l    0
  124.  
  125. NewMenu0VI:                             ; Menu Visual Info
  126.     dc.l    1
  127.  
  128. NewMenu0LT:                             ; Tags for layout menu
  129.     dc.l    $80080043,1                 ;  V39 newmenu
  130.     dc.l    0                           ;  Tag_Done
  131.     Even
  132. BevelTags:
  133.     Dc.w    $8008
  134. B1t    Dc.w    $35;    $0035
  135.     Dc.l    1                 ; GTBB_Recessed,True
  136.     Dc.l    $80080034,0                 ; GT_VisualInfo
  137.     Dc.l    0                           ; TAG_DONE
  138.     CNop    0,2
  139.  
  140. BevelTags2:
  141.     Dc.w    $8008
  142. B2t    Dc.w    $0035
  143.     Dc.l    1                 ; GTBB_Recessed,True
  144.     Dc.l    $80080034,0                 ; GT_VisualInfo
  145.     Dc.l    0                           ; TAG_DONE
  146.     CNop    0,2
  147.  
  148. BevelTags3:
  149.     Dc.w    $8008
  150. B3t    Dc.w    $0035
  151.     Dc.l    1                 ; GTBB_Recessed,True
  152.     Dc.l    $80080034,0                 ; GT_VisualInfo
  153.     Dc.l    0                           ; TAG_DONE
  154.     CNop    0,2
  155.  
  156.  
  157.  
  158.  
  159.     XDEF    Win0
  160.     XDEF    Win0GList
  161.     XDEF    Win0VisualInfo
  162.     XDEF    Win0DrawInfo
  163.  
  164. Win0:
  165.     dc.l    0
  166. Win0VisualInfo:
  167.     dc.l    0
  168. Win0DrawInfo:
  169.     dc.l    0
  170.  
  171. Win0MsgPort:
  172.     dc.l    0
  173. Win0WindowTitle:
  174.     dc.b    'LED',0
  175.     cnop    0,2
  176.  
  177. Win0BufNewGad:
  178.     dc.w    0,0,0,0
  179.     dc.l    0,0
  180.     dc.w    0
  181.     dc.l    0,0,0
  182. Win0_Gad0TX:                            ; Text for Text_Kind gadget
  183.     dc.b    'H. DISK',0
  184.     cnop    0,2
  185. Win0_Gad1TX:                            ; Text for Text_Kind gadget
  186.     dc.b    'F. DISK',0
  187.     cnop    0,2
  188. Win0_Gad2TX:                            ; Text for Text_Kind gadget
  189.     dc.b    'POWER',0
  190.     cnop    0,2
  191. GD_Win0_Gad0                                   EQU    0
  192. Win0_Gad0                                      EQU    0
  193. GD_Win0_Gad1                                   EQU    1
  194. Win0_Gad1                                      EQU    1
  195. GD_Win0_Gad2                                   EQU    2
  196. Win0_Gad2                                      EQU    2
  197.  
  198. GDX_Win0_Gad0                                  EQU    0
  199. GDX_Win0_Gad1                                  EQU    1
  200. GDX_Win0_Gad2                                  EQU    2
  201.  
  202. Win0GTags:
  203.     dc.l    $8008000B,Win0_Gad0TX       ; GTTX_Text
  204.     dc.l    0                           ; TAG_DONE
  205.     dc.l    $8008000B,Win0_Gad1TX       ; GTTX_Text
  206.     dc.l    0                           ; TAG_DONE
  207.     dc.l    $8008000B,Win0_Gad2TX       ; GTTX_Text
  208.     dc.l    0                           ; TAG_DONE
  209.  
  210. Win0GTypes:
  211.     dc.w    13                          ; Text
  212.     dc.w    13                          ; Text
  213.     dc.w    13                          ; Text
  214.  
  215. Win0NGad:
  216.     dc.w    4,1,59,12
  217.     dc.l    Win0_Gad0Text,topaz800
  218.     dc.w    GD_Win0_Gad0
  219.     dc.l    1,0,0
  220.     dc.w    4,12,61,12
  221.     dc.l    Win0_Gad1Text,topaz800
  222.     dc.w    GD_Win0_Gad1
  223.     dc.l    1,0,0
  224.     dc.w    3,23,61,12
  225.     dc.l    Win0_Gad2Text,topaz800
  226.     dc.w    GD_Win0_Gad2
  227.     dc.l    1,0,0
  228.  
  229. Win0_Gad0Text:
  230.     dc.b    '',0
  231.  
  232. Win0_Gad1Text:
  233.     dc.b    '',0
  234.  
  235. Win0_Gad2Text:
  236.     dc.b    '',0
  237.  
  238.     cnop    0,2
  239.  
  240. Win0ZoomInfo:
  241.     dc.w    0,11,120,11                  ; Initial zoom size
  242.  
  243.  
  244.     XDEF    Win0Gadgets
  245. Win0Gadgets:
  246.     ds.l    3
  247. Win0Cla:                                ; Private Class Name Container
  248.     dc.l    0
  249. Win0PrevGadget:                         ; Previous Gadget Container
  250.     dc.l    0
  251. Win0QuickTags:                          ; Tags for SetAttrs and SetGadgetAttrs
  252.     dc.l    0,0,0
  253.     cnop    0,2
  254.  
  255.     XDEF    Win0Offx
  256.     XDEF    Win0Offy
  257. Win0Offx:                               ; Window X offset
  258.     dc.w    0
  259. Win0Offy:                               ; Window Y Offset
  260.     dc.w    0
  261.  
  262. Win0Tags:
  263.     dc.l    $80000064,533                ; WA_Left
  264.     dc.l    $80000065,11                ; WA_Top
  265.     dc.l    $80000066
  266. Win0Width:
  267.     dc.l    116
  268.     dc.l    $80000067
  269. Win0Height:
  270.     dc.l    37                          ; WA_Height
  271.     dc.l    $8000006E                   ; WA_Title
  272. Win0WT:
  273.     dc.l    Win0WindowTitle             ; Window Title
  274.     dc.l    $80000072,120               ; WA_MinWidth
  275.     dc.l    $80000073,48                ; WA_MinHeight
  276.     dc.l    $80000074,120               ; WA_MaxWidth
  277.     dc.l    $80000075,48                ; WA_MaxHeight
  278.     dc.l    $80000082,1                 ; WA_DragBar,True
  279.     dc.l    $80000083,1                 ; WA_DepthGadget,True
  280.     dc.l    $80000084,1                 ; WA_CloseGadget,True
  281.     dc.l    $80000089,0                 ; WA_Activate,True
  282.     dc.l    $80000093,1                 ; WA_NewLookMenus,True
  283.     dc.l    $8000008D,1                 ; WA_SmartRefresh,True
  284.     dc.l    $80000090,1                 ; WA_AutoAdjust,True
  285.     dc.l    $8000006C                   ; WA_Gadgets
  286. Win0GList:
  287.     dc.l    0                           ; WA_Gadgets
  288.     dc.l    $8000007D,Win0ZoomInfo      ; WA_Zoom
  289.     dc.l    $80000079                   ; WA_PubScreen Split over two lines so label is at right place
  290. Win0Scr:                                ; (Using default screen)
  291.     dc.l    0
  292.     dc.l    0                           ; TAG_END
  293.  
  294. _AbsExecBase                EQU     4
  295.     XDEF    _SysBase
  296. _SysBase                    DS.L    1
  297.     XDEF    _DOSBase
  298. _DOSBase:
  299.     dc.l    0
  300.     XDEF    _GadToolsBase
  301. _GadToolsBase:
  302.     dc.l    0
  303.     XDEF    _GfxBase
  304. _GfxBase:
  305.     dc.l    0
  306.     XDEF    _IntuitionBase
  307. _IntuitionBase:
  308.     dc.l    0
  309.     XDEF    _ReqToolsBase
  310. _ReqToolsBase:
  311.     dc.l    0
  312.     XDEF    _IconBase
  313. _IconBase:
  314.     dc.l    0
  315. Icon_Name:
  316.     dc.b    'icon.library',0
  317. DOS_Name:
  318.     dc.b    'dos.library',0
  319. GadTools_Name:
  320.     dc.b    'gadtools.library',0
  321. Gfx_Name:
  322.     dc.b    'graphics.library',0
  323. Intuition_Name:
  324.     dc.b    'intuition.library',0
  325. ReqTools_Name:
  326.     dc.b    'reqtools.library',0
  327.     cnop 0,2
  328.  
  329.     XDEF    topaz800
  330.  
  331. topaz800:
  332.     dc.l    topaz800FontName
  333.     dc.w    8
  334.     dc.b    0,0
  335.  
  336. topaz800FontName:
  337.     dc.b    'topaz.font',0
  338.     CNOP    0,2
  339.  
  340.     XDEF    MakeMenuNewMenu0
  341. MakeMenuNewMenu0:                       ; Parameter of visual info in a0
  342.     movem.l d1-d4/a0-a4/a6,-(sp)        ; Store registers
  343.     move.l  a0,NewMenu0VI               ; Store VisualInfo
  344.     lea     NewMenu0NewMenu0,a0         ; New Menu array into a0
  345.     move.l  #0,a1                       ; Tags for createmenu into a1
  346.     move.l  _GadToolsBase,a6            ; Prepare for GadTools call
  347.     jsr     _LVOCreateMenusA(a6)            ; Call create menu
  348.     move.l  d0,NewMenu0                 ; Copy result into menu pointer
  349.     tst.l   d0                          ; See if bad result
  350.     beq     NewMenu0CError              ; Return error
  351.     move.l  NewMenu0,a0                 ; Menu into a0
  352.     move.l  NewMenu0VI,a1               ; VisualInfo into a1
  353.     lea     NewMenu0LT,a2               ; TagList into a2
  354.     move.l  _GadToolsBase,a6            ; Prepare for GadTools call
  355.     jsr     _LVOLayoutMenusA(a6)            ; Call create menu
  356.     tst.l   d0                          ; See if bad result
  357.     beq     NewMenu0LError              ; Return error
  358.     moveq   #0,d0                       ; Set return value of 0
  359.     jmp     NewMenu0Done                ; Exit succesfully
  360. NewMenu0CError:                         ; In case of a create error
  361.     moveq   #1,d0                       ; Set return value of 1
  362.     jmp     NewMenu0Done                ; Go to end
  363. NewMenu0LError:                         ; In case of a layout error
  364.     moveq   #2,d0                       ; Set return value of 2
  365.     jmp     NewMenu0Done                ; Go to end
  366.     move.l  NewMenu0,a0                 ; Menu into a0
  367.     move.l  _GadToolsBase,a6            ; Prepare for GadTools call
  368.     jsr     _LVOFreeMenus(a6)               ; Free allocated menu
  369.     move.l  #0,NewMenu0
  370. NewMenu0Done:                           ; Tidy up
  371.     movem.l (sp)+,d1-d4/a0-a4/a6        ; Restore registers
  372.     rts
  373.  
  374.  
  375. Refresh_Window
  376.     movem.l d0-d4/a0-a4/a6,-(sp)        ; Store registers
  377.     move.l  Win0,d0
  378.     tst.l   d0
  379.     beq     .Nope
  380.     movea.l Win0,a0
  381.     movea.l 50(a0),a4
  382.     move.l  Win0VisualInfo,BevelTags+12
  383.     move.l  Win0VisualInfo,BevelTags2+12
  384.     move.l  Win0VisualInfo,BevelTags3+12
  385.     move.l  _GadToolsBase(Pc),a6
  386.     move.l  #4,d0                       ; Bevel height
  387.     move.l  d0,d3
  388.     move.l  #40,d0                      ; Bevel width
  389.     move.l  d0,d2
  390.     move.l  #4,d0                       ; Bevel top
  391.     add.w   Win0Offy(Pc),d0
  392.     move.l  d0,d1
  393.     move.l  #67,d0                      ; Bevel bottom
  394.     add.w   Win0Offx(Pc),d0
  395.     move.l  a4,a0                       ; Put RPort in a0
  396.     lea     BevelTags(Pc),a1
  397.     jsr     _LVODrawBevelBoxA(a6)           ; Call DrawBevelBoxA
  398.     move.l  #4,d0                       ; Bevel height
  399.     move.l  d0,d3
  400.     move.l  #40,d0                      ; Bevel width
  401.     move.l  d0,d2
  402.     move.l  #15,d0                      ; Bevel top
  403.     add.w   Win0Offy(Pc),d0
  404.     move.l  d0,d1
  405.     move.l  #67,d0                      ; Bevel bottom
  406.     add.w   Win0Offx(Pc),d0
  407.     move.l  a4,a0                       ; Put RPort in a0
  408.     lea     BevelTags2(Pc),a1
  409.     jsr     _LVODrawBevelBoxA(a6)           ; Call DrawBevelBoxA
  410.     move.l  #4,d0                       ; Bevel height
  411.     move.l  d0,d3
  412.     move.l  #40,d0                      ; Bevel width
  413.     move.l  d0,d2
  414.     move.l  #26,d0                      ; Bevel top
  415.     add.w   Win0Offy(Pc),d0
  416.     move.l  d0,d1
  417.     move.l  #67,d0                      ; Bevel bottom
  418.     add.w   Win0Offx,d0
  419.     move.l  a4,a0                       ; Put RPort in a0
  420.     lea     BevelTags3(Pc),a1
  421.     jsr     _LVODrawBevelBoxA(a6)           ; Call DrawBevelBoxA
  422. .Nope
  423.     movem.l (sp)+,d0-d4/a0-a4/a6        ; Restore registers
  424.     rts
  425.  
  426.     XDEF    OpenWin0Window
  427. OpenWin0Window:
  428.     move.l  #0,a0
  429.     movem.l d1-d4/a0-a6,-(sp)
  430.     move.l  a0,Win0MsgPort
  431.     move.l  Win0,d0                     ; See if window already open, if it is then move it to front etc and exit
  432.     tst.l   d0
  433.     bne     Win0AlreadyOpen
  434.  
  435.     lea.l   PublicName,a0
  436.     cmp.b   #0,(a0)
  437.     bne     .UsePubl
  438.     sub.l   a0,a0
  439.     bra.w   .UseWb
  440. .UsePubl
  441.     move.l  #PublicName,a0                       ; Sort out screen name pointer
  442. .UseWb
  443.     CALLINT LockPubScreen
  444.  
  445.     move.l  d0,Win0Scr                  ; Move screen address into tag
  446.     beq     NoWin0Scr                   ; Cannot lock screen
  447.     move.l  #116,Win0Width
  448.     move.l  #37,Win0Height
  449.     move.l  Win0Scr,a0                  ; Copy screen into a0
  450.     move.b  36(a0),Win0Offx+1           ; Get left border width in Win_Offx
  451.     move.l  40(a0),a1                   ; Put screen font structure address in a1
  452.     move.w  4(a1),d1                    ; Put screen font ta_YSize in d1
  453.     addq.w  #1,d1                       ; Add 1 to d1
  454.     move.b  35(a0),d0                   ; Put screen window border top in d0
  455.     ext.w   d0                          ; Turn d0 into word from byte
  456.     add.w   d1,d0                       ; Get Offy in d0
  457.     move.w  d0,Win0Offy                 ; Store Win_Offy
  458.     move.l  Win0Height,d1               ; Get window height
  459.     add.w   d0,d1                       ; Add offy
  460.     move.l  d1,Win0Height               ; Store window height
  461.     move.w  Win0Offx,d0
  462.     move.l  Win0Width,d1                ; Get window width
  463.     add.w   d0,d1                       ; Add offx
  464.     move.l  d1,Win0Width                ; Store window width
  465.     move.l  Win0Scr,a0                  ; Put Screen in a0
  466.     move.l  #0,a1                       ; Put NULL in a1
  467.     move.l  _GadToolsBase,a6            ; Prepare for GadTools call
  468.     jsr     _LVOGetVisualInfoA(a6)          ; Get Visual Info
  469.     move.l  d0,Win0VisualInfo           ; Store Visual Info
  470.     beq     CannotGetWin0VisualInfo     ; Cannot get VI
  471.     move.l  Win0Scr,a0                  ; Put Screen in a0
  472.     move.l  _IntuitionBase,a6           ; Prepare for Intuition call
  473.     jsr     _LVOGetScreenDrawInfo(a6)       ; Get Visual Info
  474.     move.l  d0,Win0DrawInfo             ; Store DrawInfo
  475.     beq     CannotGetWin0DrawInfo       ; Cannot get DrawInfo
  476.     move.l  #0,Win0GList                ; Zero GList
  477.     movea.l _GadToolsBase,a6            ; Prepare for GadTools call
  478.     lea     Win0GList,a0                ; Put GList in a0
  479.     jsr     _LVOCreateContext(a6)           ; Create context for gadtools gadget
  480.     movea.l d0,a2                       ; Put return value in a2
  481.     tst.l   d0                          ; See if got NULL return
  482.     beq     CannotCreateWin0Context
  483.                                         ; d3 = current gad       a5 = current gad address
  484.                                         ; a4 = current gad tags  a3 = current gad kind
  485.                                         ; a2 = previous gad
  486.     move.l  #0,d3                       ; Set to initial value
  487.     lea     Win0NGad,a5                 ; Set to initial value
  488.     lea     Win0GTags,a4                ; Set to initial value
  489.     lea     Win0GTypes,a3               ; Set to initial value
  490. Win0GadgetLoop:
  491.     move.w  (a3),d0
  492.     cmp.w   #198,d0
  493.     beq     Win0SkipOneGadget           ; Skip gadget if it is an object
  494.     movea.l _SysBase,a6                 ; Prepare for Exec call
  495.     movea.l a5,a0                       ; Source in a0
  496.     lea     Win0BufNewGad,a1            ; Dest in a1
  497.     moveq   #30,d0                      ; Size to copy
  498.     jsr     _LVOCopyMem(a6)                 ; Got copy of NewGad
  499.     move.l  #0,d0                       ; Zero d0
  500.     move.l  Win0VisualInfo,Win0BufNewGad+22  ; Visual Info into newgad
  501.     move.w  Win0Offx,d0                 ; get Offx
  502.     move.w  Win0BufNewGad,d1            ; get LeftEdge
  503.     add.w   d1,d0                       ; Add offset
  504.     move.w  d0,Win0BufNewGad            ; Store new value
  505.     move.w  Win0Offy,d0                 ; Get Offy
  506.     move.w  2+Win0BufNewGad,d1          ; Get TopEdge addr
  507.     add.w   d1,d0                       ; Add offset
  508.     move.w  d0,Win0BufNewGad+2          ; Store new value
  509.     move.l  #0,d0                       ; To make next word operations safe
  510.     movea.l _GadToolsBase,a6            ; Prepare for GadTools call
  511.     movea.l a2,a0                       ; Put previous in a0
  512.     move.w  (a3),d0
  513.     lea     Win0BufNewGad,a1            ; NewGad in a1
  514.     movea.l a4,a2
  515.     jsr     _LVOCreateGadgetA(a6)           ; Create Gadget
  516.     movea.l d0,a2                       ; Store result
  517.     tst.l   d0                          ; test result
  518.     beq     Win0BadGadgets              ; Create failed, fail open window
  519.     lea    Win0Gadgets,a0               ; Get gadget array address
  520.     move.l  d3,d0                       ; Get gadget number
  521.     mulu    #4,d0                       ; Get offset in array
  522.     adda.l  d0,a0                       ; Get address of position in array
  523.     move.l  a2,(a0)                     ; Store address
  524. Win0SkipOneGadget:                      ; Skip gadget if it is an object
  525.     add.w   #1,d3                       ; Set for next NewGad
  526.     adda    #30,a5                      ; Move to next NewGad
  527.     adda    #2,a3                       ; Move to next Gad kind
  528.     jmp     Win0NextTag2                ; Get next tag array
  529. Win0NextTag1:                           ; Get next tag array
  530.     adda    #8,a4                       ; Get next tag array
  531. Win0NextTag2:                           ; Get next tag array
  532.     move.l  (a4),d0                     ; Get next tag array
  533.     tst.l   d0                          ; Get next tag array
  534.     bne     Win0NextTag1                ; Get next tag array
  535.     adda    #4,a4                       ; Get next tag array
  536.     move.w  d3,d0                       ; Put number of gadget in d0
  537.     sub.w   #3,d0
  538.     tst.w   d0                          ; See if done
  539.     bne     Win0GadgetLoop              ; If not done repeat
  540.                                         ; Code to create objects
  541.                                         ; d3 = current gad       a5 = current gad address
  542.                                         ; a4 = current gad tags  a3 = current gad kind
  543.                                         ; a2 = previous gad
  544.     move.l  a2,Win0PrevGadget
  545.     move.l  #0,d3                       ; Set to initial value
  546.     lea     Win0NGad,a5                 ; Set to initial value
  547.     lea     Win0GTags,a4                ; Set to initial value
  548.     lea     Win0GTypes,a3               ; Set to initial value
  549. Win0ObjectLoop:
  550.     move.w  (a3),d0
  551.     cmp.w   #198,d0
  552.     bne     Win0SkipNotObject           ; Skip gadget if it is not an object
  553.     move.l  #0,Win0Cla
  554.     movea.l Win0Cla,a0                  ; Get Private Class Name in a0
  555.     movea.l 8(a5),a1                    ; Get Public Class Name in a1
  556.     movea.l a4,a2                       ; Get Tag array
  557.     movea.l _IntuitionBase,a6           ; Prepare for GadTools call
  558.     jsr     _LVONewObjectA(a6)              ; Create Gadget
  559.     movea.l d0,a2                       ; Store result
  560.     lea     Win0Gadgets,a0              ; Get gadget array address
  561.     move.l  d3,d0                       ; Get gadget number
  562.     mulu    #4,d0                       ; Get offset in array
  563.     adda.l  d0,a0                       ; Get address of position in array
  564.     move.l  a2,(a0)                     ; Store address
  565.     move.l  a2,d0                       ; Put address back
  566.     tst.l   d0                          ; test result
  567.     beq     Win0BadGadgets              ; Create failed, fail open window
  568. Win0SkipNotObject:                      ; Skip gadget if it is not an object
  569.     add.w   #1,d3                       ; Set for next NewGad
  570.     adda    #30,a5                      ; Move to next NewGad
  571.     adda    #2,a3                       ; Move to next Gad kind
  572.     jmp     Win0NextTag4                ; Get next tag array
  573. Win0NextTag3:                           ; Get next tag array
  574.     adda    #8,a4                       ; Get next tag array
  575. Win0NextTag4:                           ; Get next tag array
  576.     move.l  (a4),d0                     ; Get next tag array
  577.     tst.l   d0                          ; Get next tag array
  578.     bne     Win0NextTag3                ; Get next tag array
  579.     adda    #4,a4                       ; Get next tag array
  580.     move.w  d3,d0                       ; Put number of gadget in d0
  581.     sub.w   #3,d0
  582.     tst.w   d0                          ; See if done
  583.     bne     Win0ObjectLoop              ; If not done repeat
  584.     move.l  #0,a0
  585.     lea     Win0Tags,a1
  586.     move.l  _IntuitionBase,a6
  587.     jsr     _LVOOpenWindowTagList(a6)
  588.     move.l  d0,Win0                     ; Store result
  589.     tst.l   d0
  590.     beq     Win0CannotOpenWin           ; Fail and tidy up if cannot open window
  591.     move.l  Win0,a0
  592.     move.l  Win0MsgPort,a1
  593.     move.l  a1,86(a0)
  594.     move.l  #9028,d0
  595.     move.l  _IntuitionBase,a6
  596.     jsr     _LVOModifyIDCMP(a6)
  597.     jsr     Refresh_Window
  598.     move.l  Win0,a1                     ; Refresh Window, put win in a0
  599.     move.l  Win0GList,a0                ; Refresh Window, put glist in a0
  600.     move.l  #0,a2
  601.     move.l  #$FFFF,d0
  602.     move.l  _IntuitionBase,a6           ; Prepare for Intuition call
  603.     jsr     _LVORefreshGList(a6)            ; Call RefreshGList
  604.     move.l  Win0,a0                     ; Refresh Window, put win in a0
  605.     move.l  #0,a1                       ; Clear a1
  606.     move.l  _GadToolsBase,a6            ; Prepare for GadTools call
  607.     jsr     _LVOGT_RefreshWindow(a6)        ; Call GT_RefreshWindow
  608.     move.l  NewMenu0,d0
  609.     tst.l   d0
  610.     bne     Win0MenuAlreadyOpen
  611.     move.l  Win0VisualInfo,a0
  612.     jsr     MakeMenuNewMenu0
  613. Win0MenuAlreadyOpen:
  614.     move.l  NewMenu0,d0
  615.     tst.l   d0
  616.     beq     Win0MenuNotOpen
  617.     move.l  Win0,a0
  618.     move.l  NewMenu0,a1
  619.     move.l  _IntuitionBase,a6
  620.     jsr     _LVOSetMenuStrip(a6)
  621.     move.l  #0,d0
  622.     jmp      UnlockWin0Screen
  623. Win0MenuNotOpen:
  624.     move.l  #0,d0
  625.     jmp      UnlockWin0Screen
  626. Win0AlreadyOpen:
  627.     move.l  _IntuitionBase,a6           ; Prepare for intuition call
  628.     move.l  Win0,a0                     ; Window open so...
  629.     jsr     _LVOActivateWindow(a6)          ; Activate Window
  630.     jsr     _LVOWindowToFront(a6)           ; Move window to front
  631.     move.l  #0,d0                       ; Return OK because window already open
  632.     jmp     OpenWin0Done
  633. Win0CannotOpenWin:
  634.     move.l  #1,d0
  635.     jmp      FreeWin0Gadgets
  636. Win0BadGadgets:
  637.     move.l   #2,d0
  638. FreeWin0Gadgets:
  639.     move.l  d0,d2
  640.     move.l  _GadToolsBase,a6
  641.     move.l  Win0GList,a0
  642.     jsr     _LVOFreeGadgets(a6)
  643.     move.l  d2,d0
  644.     jmp     FreeWin0DrawInfo
  645. CannotCreateWin0Context:
  646.     move.l  #4,d0
  647. FreeWin0DrawInfo:
  648.     move.l  d0,d2
  649.     movea.l _IntuitionBase,a6
  650.     movea.l Win0Scr,a0
  651.     movea.l Win0DrawInfo,a1
  652.     jsr     _LVOFreeScreenDrawInfo(a6)
  653.     move.l  #0,Win0DrawInfo
  654.     move.l  d2,d0
  655.     jmp     FreeWin0VisualInfo
  656. CannotGetWin0DrawInfo:
  657.     move.l  #128,d0
  658. FreeWin0VisualInfo:
  659.     move.l  d0,d2
  660.     move.l  _GadToolsBase,a6
  661.     move.l  Win0VisualInfo,a0
  662.     jsr     _LVOFreeVisualInfo(a6)
  663.     move.l  #0,Win0VisualInfo
  664.     move.l  d2,d0
  665.     jmp     UnlockWin0Screen
  666. CannotGetWin0VisualInfo:
  667.     move.l  #8,d0
  668. UnlockWin0Screen:
  669.     move.l  d0,d2
  670.     move.l  _IntuitionBase,a6
  671.     move.l  #0,a0
  672.     move.l  Win0Scr,a1
  673.     jsr     _LVOUnlockPubScreen(a6)
  674.     move.l  #0,Win0Scr
  675.     move.l  d2,d0
  676.     jmp     OpenWin0Done
  677. NoWin0Scr:                              ; Could not lock screen
  678.     move.l  #16,d0                      ; Set return code of 16
  679. OpenWin0Done:                           ; Finish openwindow
  680.     movem.l (sp)+,d1-d4/a0-a6           ; Restore Registers
  681.     rts                                 ; Return
  682.  
  683.     XDEF    CloseWin0Window
  684. CloseWin0Window:
  685.     movem.l d0-d2/a0-a6,-(sp)           ; Store Registers
  686.     move.l  Win0,d1                     ; See if window open
  687.     tst.l   d1
  688.     beq     Win0NotOpen
  689.     move.l  Win0DrawInfo,d1
  690.     tst.l   d1
  691.     beq     Win0NoSDI
  692.     movea.l Win0,a0
  693.     movea.l 46(a0),a0                   ; Get Screen
  694.     movea.l Win0DrawInfo,a1
  695.     move.l  _IntuitionBase,a6
  696.     jsr     _LVOFreeScreenDrawInfo(a6)
  697.     move.l  #0,Win0DrawInfo
  698. Win0NoSDI:
  699.     move.l  Win0,a0                     ; ClearMenuStrip
  700.     move.l  _IntuitionBase,a6
  701.     jsr     _LVOClearMenuStrip(a6)
  702.     move.l  NewMenu0,a0
  703.     move.l  _GadToolsBase,a6
  704.     jsr     _LVOFreeMenus(a6)
  705.     move.l  #0,NewMenu0
  706.     move.l  Win0,a0
  707.     jsr     CloseWindowSafely
  708.     move.l  #0,Win0
  709. Win0NotOpen:
  710.     move.l  Win0VisualInfo,d1
  711.     tst.l   d1
  712.     beq     Win0NoCVI
  713.     move.l  d1,a0
  714.     move.l  _GadToolsBase,a6
  715.     jsr     _LVOFreeVisualInfo(a6)
  716.     move.l  #0,Win0VisualInfo
  717. Win0NoCVI:
  718.     move.l  Win0GList,d1
  719.     tst.l   d1
  720.     beq     Win0NoCGList
  721.     move.l  d1,a0
  722.     move.l  _GadToolsBase,a6
  723.     jsr     _LVOFreeGadgets(a6)
  724.     move.l  #0,Win0GList
  725. Win0NoCGList:
  726.     movea.l _IntuitionBase,a6           ; Prepare for intuition call
  727.     movem.l (sp)+,d0-d2/a0-a6
  728.     rts
  729.  
  730.  
  731.     XDEF    OpenLibs
  732.  
  733. OpenLibs:                               ; 0 indicates success, 1 failure, no parameters
  734.     movem.l d1/a0-a2/a6,-(sp)           ; Store registers
  735.     move.l    _AbsExecBase,_SysBase     ; Set up Exec Library Base
  736.  
  737.     lea     DOS_Name,a1
  738.     moveq   #0,d0
  739.     move.l  _SysBase,a6
  740.     jsr     _LVOOpenLibrary(a6)
  741.     move.l  d0,_DOSBase
  742.     beq     DOSNotOpened
  743.     lea     GadTools_Name,a1            ; Put library name into a1
  744.     moveq   #37,d0                      ; Put version in d0
  745.     move.l  _SysBase,a6                 ; Put SysBase in a6 to call Exec function
  746.     jsr     _LVOOpenLibrary(a6)             ; Call OpenLibrary
  747.     move.l  d0,_GadToolsBase            ; Put result in library base
  748.     beq     Close_Others                ; If failed call close of previous open.
  749.  
  750.     lea     Gfx_Name,a1                 ; Put library name into a1
  751.     moveq   #37,d0                      ; Put version in d0
  752.     move.l  _SysBase,a6                 ; Put SysBase in a6 to call Exec function
  753.     jsr     _LVOOpenLibrary(a6)             ; Call OpenLibrary
  754.     move.l  d0,_GfxBase                 ; Put result in library base
  755.     beq     Close_GadTools              ; If failed call close of previous open.
  756.  
  757.     lea     Icon_Name,a1                ; Put library name into a1
  758.     moveq   #37,d0                      ; Put version in d0
  759.     move.l  _SysBase,a6                 ; Put SysBase in a6 to call Exec function
  760.     jsr     _LVOOpenLibrary(a6)             ; Call OpenLibrary
  761.     move.l  d0,_IconBase                ; Put result in library base
  762.     beq     Close_Gfx                   ; If failed call close of previous open.
  763.  
  764.     lea     Intuition_Name,a1           ; Put library name into a1
  765.     moveq   #37,d0                      ; Put version in d0
  766.     move.l  _SysBase,a6                 ; Put SysBase in a6 to call Exec function
  767.     jsr     _LVOOpenLibrary(a6)             ; Call OpenLibrary
  768.     move.l  d0,_IntuitionBase           ; Put result in library base
  769.     beq     Close_Gfx                   ; If failed call close of previous open.
  770.  
  771.     lea     ReqTools_Name,a1            ; Put library name into a1
  772.     moveq   #0,d0                       ; Put version in d0
  773.     move.l  _SysBase,a6                 ; Put SysBase in a6 to call Exec function
  774.     jsr     _LVOOpenLibrary(a6)             ; Call OpenLibrary
  775.     move.l  d0,_ReqToolsBase            ; Put result in library base
  776.     beq     Close_Intuition             ; If failed call close of previous open.
  777.  
  778.     movem.l (sp)+,d1/a0-a2/a6           ; Put registers back
  779.     move.l  #0,d0                       ; Put 0 in d0 for a succesful return
  780.     rts                                 ; Return from OpenLibs
  781.  
  782.  
  783.     XDEF    CloseLibs
  784.  
  785. CloseLibs:                              ; No parameters, no return, d0 contents destroyed
  786.     movem.l d1/a0-a2/a6,-(sp)           ; Store registers
  787.  
  788.     move.l  _ReqToolsBase,a1            ; Put library base in a1
  789.     cmpa.l  #0,a1                       ; See if open
  790.     beq     Close_Intuition             ; Skip close if not opened
  791.     move.l  _SysBase,a6                 ; Put ExecBase in a6 for Exec call
  792.     jsr     _LVOCloseLibrary(a6)            ; Call Closelibrary
  793. Close_Intuition:
  794.     move.l  _IntuitionBase,a1           ; Put library base in a1
  795.     cmpa.l  #0,a1                       ; See if open
  796.     beq     Close_Gfx                   ; Skip close if not opened
  797.     move.l  _SysBase,a6                 ; Put ExecBase in a6 for Exec call
  798.     jsr     _LVOCloseLibrary(a6)            ; Call Closelibrary
  799. Close_Icon:
  800.     move.l  _IconBase,a1                ; Put library base in a1
  801.     cmpa.l  #0,a1                       ; See if open
  802.     beq     Close_Gfx                   ; Skip close if not opened
  803.     move.l  _SysBase,a6                 ; Put ExecBase in a6 for Exec call
  804.     jsr     _LVOCloseLibrary(a6)            ; Call Closelibrary
  805. Close_Gfx:
  806.     move.l  _GfxBase,a1                 ; Put library base in a1
  807.     cmpa.l  #0,a1                       ; See if open
  808.     beq     Close_GadTools              ; Skip close if not opened
  809.     move.l  _SysBase,a6                 ; Put ExecBase in a6 for Exec call
  810.     jsr     _LVOCloseLibrary(a6)            ; Call Closelibrary
  811. Close_GadTools:
  812.     move.l  _GadToolsBase,a1            ; Put library base in a1
  813.     cmpa.l  #0,a1                       ; See if open
  814.     beq Close_Others
  815.     move.l  _SysBase,a6 
  816.     jsr     _LVOCloseLibrary(a6) 
  817. Close_Others:                           ; Close libraries whose opening was not compulsory.
  818. Close_DOS:
  819.     move.l  _DOSBase,a1                 ; Put library base in a1
  820.     move.l  _SysBase,a6                 ; Load SysBase into a6 for Exec call
  821.     jsr     _LVOCloseLibrary(a6)            ; Call CloseLibrary
  822. DOSNotOpened:
  823.     movem.l (sp)+,d1/a0-a2/a6           ; Put registers back
  824.     move.l #1,d0                        ; Put 1 in d0 so call to OpenLibs gets 1 returned if failed
  825.                                         ; If called CloseLibs then ignore return
  826.                                         ; CloseLibs destroys contents of d0
  827.     rts                                 ; Return from CloseLibs
  828.  
  829.  
  830. StripIntuiMessages:
  831.     movem.l d0/a0-a6,-(sp)
  832.     movea.l a0,a2
  833.     movea.l 86(a0),a0
  834.     movea.l 20(a0),a0
  835. StripLoop:
  836.     movea.l (a0),a3
  837.     move.l  a3,d0
  838.     tst.l   d0
  839.     beq     EndStrip
  840.     cmpa.l  44(a0),a2
  841.     bne     StripSkip
  842.     movea.l a0,a4
  843.     movea.l a0,a1
  844.     movea.l _SysBase,a6
  845.     jsr     _LVORemove(a6)
  846.     movea.l a4,a1
  847.     jsr     _LVOReplyMsg(a6)
  848. StripSkip:
  849.     movea.l a3,a0
  850.     jmp     StripLoop
  851. EndStrip:
  852.     movem.l  (sp)+,d0/a0-a6
  853.     rts
  854.     XDEF    CloseWindowSafely           ; Window in a0
  855.  
  856. CloseWindowSafely:
  857.     movem.l d0/a0/a4/a6,-(sp)
  858.     move.l  a0,a4
  859.     move.l  _SysBase,a6
  860.     jsr     _LVOForbid(a6)
  861.     move.l  a4,a0
  862.     jsr     StripIntuiMessages
  863.     move.l  #0,86(a0)
  864.     move.l  _IntuitionBase,a6
  865.     move.l  #0,d0
  866.     move.l  a4,a0
  867.     jsr     _LVOModifyIDCMP(a6)
  868.     move.l  _SysBase,a6
  869.     jsr     _LVOPermit(a6);
  870.     move.l  a4,a0
  871.     move.l  _IntuitionBase,a6
  872.     jsr     _LVOCloseWindow(a6)
  873.     movem.l (sp)+,d0/a0/a4/a6
  874.     rts
  875.  
  876.  
  877. NewMenu_Menu0X                              EQU    0
  878. NewMenu_Menu0_Item0X                        EQU    0
  879. NewMenu_Menu0_Item1X                        EQU    1
  880. Win0FirstID        EQU 0
  881.  
  882.